package com.zengqingfa.designpattern.structure.flyweight;

/**
 * @author zengqingfa
 * @className ConcreteFlyweight
 * @description 　具体享元角色类
 * @create 2021/8/29 15:18
 */
public class ConcreteFlyweight implements FlyWeight {

    /**
     * 内蕴状态,它的值应当在享元对象被创建时赋予。所有的内蕴状态在对象创建之后，就不会再改变了。
     */
    private Character intrinsicState = null;

    /**
     * 构造函数，内蕴状态作为参数传入
     *
     * @param state
     */
    public ConcreteFlyweight(Character state) {
        System.out.println("内部状态变化");
        this.intrinsicState = state;
    }


    /**
     * 外蕴状态作为参数传入方法中，改变方法的行为，
     * 但是并不改变对象的内蕴状态。
     * 如果一个享元对象有外蕴状态的话，所有的外部状态都必须存储在客户端，在使用享元对象时，
     * 再由客户端传入享元对象。这里只有一个外蕴状态，operation()方法的参数state就是由外部传入的外蕴状态。
     */
    @Override
    public void operation(String state) {
        // TODO Auto-generated method stub
        System.out.println("Intrinsic State = " + this.intrinsicState);
        System.out.println("Extrinsic State = " + state);
    }

}